# 导入gradio库
import gradio as gr
# TODO 导入requests库
import requests     # requests库用于网络请求

# 定义一个对话函数
def deepseek(question):
    print(question)
    return f"接收到问题：{question} 大模型的回答：我是专属人工智能模型（开发中）"

# TODO 将deepseek函数移植过来
# 定义deepseek函数
def deepseek(question):
    url = "https://api.siliconflow.cn/v1/chat/completions"

    payload = {     # 请求数据，类型是【字典】
        "model": "Qwen/Qwen3-8B",   # 使用的模型
        "stream": False,    # 流式输出
        "max_tokens": 512,  # 最大token数量
        "enable_thinking": True,    # 开启深度思考
        "thinking_budget": 4096,
        "min_p": 0.05,
        "temperature": 0.7,
        "top_p": 0.7,
        "top_k": 50,
        "frequency_penalty": 0.5,
        "n": 1,
        "stop": [],
        "messages": [
            {
                "role": "user",     # 角色（用户、助手、系统）
                "content": question   # 对话的内容
            }
        ]
    }
    headers = { # 请求头，带有身份认证信息
        "Authorization": "Bearer sk-supqqoppatjziqcgllvszalijkjcfecusobafjbgwbvdehqh",
        "Content-Type": "application/json"
    }

    # 使用requests库中的request方法访问网页
    response = requests.request("POST", url, json=payload, headers=headers)

    # print(response.text)

    # 提取大模型的回答
    # 1. 看一下返回结果的结构
    # (1) 新建“输出.json”
    # (2) 复制结果粘贴到“输出.json”
    # (3) 使用快捷键 Ctrl+Alt+L 进行格式化
    # 2. 梳理数据解析的思路
    # (1) 将返回结果转换为json
    # (2) 通过查询“choices”键获取一个列表
    # (3) 通过索引列表中的第0个元素获取一个字典
    # (4) 通过查询“message”键来获取一个字典
    # (5) 通过查询“content”键来获取最终的回答
    # 3.编写代码
    result = response.json().get("choices")[0].get("message").get("content")
    print(result)
    return result

# 编写一个界面
demo = gr.Interface(    # 代码简短，但自定义能力差
    fn=deepseek,        # TODO 确保函数名为真deepseek
    inputs="text",
    outputs="text"
)

demo.launch()
# 0.0.0.0 是广播地址
# 127.0.0.1 是本地回环地址